home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
ask
/
source_
/
devcheck.s
< prev
next >
Wrap
Text File
|
1998-10-01
|
2KB
|
74 lines
*--------------------------------------------------------------------
* デバイス存在チェック関数
*--------------------------------------------------------------------
* この関数では厳密にデバイスドライバの存在は識別出来ないので注意。
.include iocscall.mac
.text
.even
.xref GetNulPoint
*--------------------------------------------------------------------
.xdef _DevCheck
_DevCheck:
* 指定のデバイスドライバが存在するかどうかを調べる(キャラクターデバイス専用)
* 4(sp) <- 調べるデバイス名
* $00で終わる文字列でも8文字のデバイス名そのものでもどちらでも良い
* リターン値
* d0.l:存在しているかどうか a0:デバイスヘッダーアドレス
* = $00 ... 存在していない 不変
* = $ff ... 存在している 見つけたデバイスドライバーのヘッダーアドレス
move.l 4(sp),d0
movem.l d7/a1-a4,-(sp)
move.l d0,a2
*
* 比較するデバイス名の長さを得る -> d7.w
move.l a2,a1
moveq.l #-1,d7 * 名前比較のdbraのため
@@: move.b (a1)+,d0
beq @f
cmp.b #' ',d0
beq @f
addq.w #1,d7
cmp.w #8-1,d7
bcs @b
@@: *
clr.l a1
IOCS _B_SUPER * super visor mode
move.l d0,-(sp)
*
bsr GetNulPoint * -> a1(NUL)
*
@@: lea 14(a1),a3 * デバイス名
move.l a2,a4
move.w d7,d0
1: cmp.b (a4)+,(a3)+
dbne d0,1b
beq FoundDev * 一致
NextDev: * 不一致
move.l (a1),a1 * 次へ
cmp.l #-1,a1
bne @b
* 見つからなかった
moveq.l #0,d7 * a0は不変
bra.s @f
*
FoundDev: * 見つかった
move.l a1,a0 * デバイスヘッダーアドレス
st.b d7 * 見つかった
@@: *
move.l (sp)+,d0
bmi @f * 元からsuper visorであった
move.l d0,a1
IOCS _B_SUPER * user mode
@@: *
moveq.l #0,d0 * for .b = .l
move.b d7,d0
movem.l (sp)+,d7/a1-a4
rts
*--------------------------------------------------------------------
.end